package com.doctcloud.common.mongo.service;

import java.io.Serializable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;


import java.util.List;
import java.util.Optional;
/**
 * MongoDB 通用服务接口
 *
 * @param <T>  实体类类型
 * @param <ID> 主键类型
 */
public interface BaseMongoService<T, ID extends Serializable> {
    // 保存或更新
    T saveOrUpdate(T entity);

    // 根据 ID 查询
    Optional<T> findById(ID id);

    // 查询所有
    List<T> findAll();

    // 根据条件查询
    List<T> findByQuery(Query query);

    // 分页查询所有
    Page<T> findAll(Pageable pageable);

    // 条件分页查询
    Page<T> findByQuery(Query query, Pageable pageable);

    // 根据 ID 删除
    boolean deleteById(ID id);

    // 根据条件删除
    void deleteByQuery(Query query);

    // 条件更新（单条）
    void updateFirst(Query query, Update update);

    // 条件更新（批量）
    void updateMulti(Query query, Update update);

    // 判断 ID 是否存在
    boolean existsById(ID id);

    // 条件统计数量
    long count(Query query);
}
